package com.hirain.proxyjava;

import org.junit.Test;

import java.lang.reflect.Proxy;

/**
 * Created by caicf on 2016/8/31.
 */
public class Client {
    @Test
    public void test() {
        /**
         * 1、创建一个实现接口InvocationHandler的类，实现invoke方法
         * 2、创建被代理的类以及接口
         * 3、调用Proxy的静态方法，创建一个代理类newProxyInstance
         * 4、通过代理调用方法
         */
        RealSubject realSubject =new RealSubjectImpl();
        ProxyHandler handler=new ProxyHandler(realSubject);
        Class<?> cls= realSubject.getClass();

        /**
         * loader  被代理类的类加载器
         * interface  实现的接口
         * invocationHandler
         */
        RealSubject obj= (RealSubject) Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),handler);
        obj.doSomething("hello");
    }
}
